package com.cskaoyan.invocationhandler;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

/**
 * @author stone
 * @date 2022/07/05 10:31
 */
public class CustomInvocationHandler implements InvocationHandler {
    // 使用反射执行方法，需要的实例
    Object instance;

    public CustomInvocationHandler(Object instance) {
        this.instance = instance;
    }

    /**
     * @param proxy → 代理对象本身
     * @param method → 方法
     * @param args → 参数
     * @return
     * @throws Throwable
     */
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
//        System.out.println("业务");
        long start = System.currentTimeMillis();
        // 执行委托类方法 → 反射
        Object invoke = method.invoke(instance, args);
//        System.out.println("业务");
        long end = System.currentTimeMillis();
        System.out.println(method.getName() + "方法执行的时间为：" + (end - start));
        return invoke;//代理对象的返回值
    }
}
